#ifndef __PIDCONTROLLER_H__
#define __PIDCONTROLLER_H__

class PidController
{
private:
    /* data */
    float target_;
    float out_min_;
    float out_max_;
    float kp_;
    float ki_;
    float kd_;
    
    // pid
    float error_sum_;
    float derror_;
    float error_last_;
    float error_pre_;
    float intergral_up_ = 2500; //积分上限

public:
    PidController(/* args */) = default;
    PidController(float kp, float ki, float kd);

public:
    float update(float current);    //提供当前值返回下次输出值
    void update_target(float target);   //更新目标值
    void update_pid(float kp, float ki, float kd);  //更新pid系数
    void reset();   //重置控制器
    void out_limit(float out_mix, float out_max);   //设置输出限制
};


#endif //__PIDCONTROLLER_H__